JAXB এবং Jackson এর মধ্যে ইন্টিগ্রেশন

Java Technologies - জ্যাকসন (Jackson) - Jackson এবং JAXB Integration
250

JAXB (Java Architecture for XML Binding) এবং Jackson হলো দুটি আলাদা লাইব্রেরি, যেগুলো XML এবং JSON ডেটা প্রক্রিয়াকরণের জন্য ব্যবহৃত হয়। অনেক সময় একই ডেটা মডেল থেকে XML এবং JSON উভয় ধরনের serialization/deserialization প্রয়োজন হয়। Jackson এবং JAXB-এর সমন্বয় করে এটি অর্জন করা যায়।


Jackson এবং JAXB-এর মধ্যে প্রধান পার্থক্য

ফিচারJAXBJackson
প্রাথমিক কাজXML ডেটা প্রক্রিয়াকরণ।JSON ডেটা প্রক্রিয়াকরণ।
অ্যানোটেশনJAXB-specific (@XmlElement, ইত্যাদি)Jackson-specific (@JsonProperty)।
ডেটা ফরম্যাটশুধুমাত্র XML।JSON, XML, YAML, CSV।
IntegrationJAXB annotations পড়তে পারে।JAXB annotations এর জন্য সাপোর্ট প্রদান করে।

JAXB এবং Jackson-এর ইন্টিগ্রেশন করার কারণ

  • একই ডেটা মডেল থেকে XML এবং JSON উভয় serialization/deserialization পরিচালনা করা।
  • কোড পুনর্ব্যবহারযোগ্যতা নিশ্চিত করা।
  • JAXB annotations এর মাধ্যমে JSON এবং XML উভয় ডেটা ফরম্যাটের জন্য সমর্থন।

ইন্টিগ্রেশন প্রক্রিয়া

1. JAXB এবং Jackson ডিপেনডেন্সি যুক্ত করা

Maven ব্যবহার করলে আপনার pom.xml-এ নিচের ডিপেনডেন্সিগুলো যুক্ত করুন:

<dependencies>
    <!-- Jackson Core -->
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.15.2</version>
    </dependency>

    <!-- Jackson Module for JAXB Annotations -->
    <dependency>
        <groupId>com.fasterxml.jackson.module</groupId>
        <artifactId>jackson-module-jaxb-annotations</artifactId>
        <version>2.15.2</version>
    </dependency>

    <!-- JAXB API -->
    <dependency>
        <groupId>jakarta.xml.bind</groupId>
        <artifactId>jakarta.xml.bind-api</artifactId>
        <version>3.0.2</version>
    </dependency>
</dependencies>

2. JAXB Annotated Class তৈরি করা

একটি ডেটা মডেল ক্লাস তৈরি করুন এবং JAXB-specific annotations ব্যবহার করুন:

import jakarta.xml.bind.annotation.XmlElement;
import jakarta.xml.bind.annotation.XmlRootElement;

@XmlRootElement
public class Product {
    private int id;
    private String name;
    private double price;

    @XmlElement
    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    @XmlElement
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @XmlElement
    public double getPrice() {
        return price;
    }

    public void setPrice(double price) {
        this.price = price;
    }
}

3. Jackson ObjectMapper-এ JAXB Module যুক্ত করা

Jackson-এর সাথে JAXB annotations সমর্থন করতে হলে JaxbAnnotationModule যুক্ত করতে হবে।

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.module.jaxb.JaxbAnnotationModule;

public class JacksonJAXBIntegrationExample {
    public static void main(String[] args) throws Exception {
        // ObjectMapper তৈরি
        ObjectMapper objectMapper = new ObjectMapper();

        // JAXB Module যুক্ত করা
        objectMapper.registerModule(new JaxbAnnotationModule());

        // Sample Data
        Product product = new Product();
        product.setId(1);
        product.setName("Smartphone");
        product.setPrice(699.99);

        // JSON Serialization
        String json = objectMapper.writeValueAsString(product);
        System.out.println("JSON Output:");
        System.out.println(json);

        // JSON Deserialization
        String jsonInput = """
                {
                    "id": 2,
                    "name": "Laptop",
                    "price": 999.99
                }
                """;
        Product deserializedProduct = objectMapper.readValue(jsonInput, Product.class);
        System.out.println("Deserialized Product:");
        System.out.println("ID: " + deserializedProduct.getId());
        System.out.println("Name: " + deserializedProduct.getName());
        System.out.println("Price: " + deserializedProduct.getPrice());
    }
}

আউটপুট:

JSON Output:
{"id":1,"name":"Smartphone","price":699.99}

Deserialized Product:
ID: 2
Name: Laptop
Price: 999.99

XML এবং JSON উভয় ফরম্যাটে Serialization/Deserialization

JAXB দিয়ে XML Serialization/Deserialization

import jakarta.xml.bind.JAXBContext;
import jakarta.xml.bind.JAXBException;
import jakarta.xml.bind.Marshaller;
import jakarta.xml.bind.Unmarshaller;
import java.io.StringReader;
import java.io.StringWriter;

public class JAXBExample {
    public static void main(String[] args) throws JAXBException {
        Product product = new Product();
        product.setId(1);
        product.setName("Smartphone");
        product.setPrice(699.99);

        // JAXB Context তৈরি
        JAXBContext context = JAXBContext.newInstance(Product.class);

        // XML Serialization
        StringWriter writer = new StringWriter();
        Marshaller marshaller = context.createMarshaller();
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
        marshaller.marshal(product, writer);
        String xml = writer.toString();
        System.out.println("XML Output:");
        System.out.println(xml);

        // XML Deserialization
        StringReader reader = new StringReader(xml);
        Unmarshaller unmarshaller = context.createUnmarshaller();
        Product deserializedProduct = (Product) unmarshaller.unmarshal(reader);
        System.out.println("Deserialized Product:");
        System.out.println("ID: " + deserializedProduct.getId());
        System.out.println("Name: " + deserializedProduct.getName());
        System.out.println("Price: " + deserializedProduct.getPrice());
    }
}

আউটপুট:

XML Output:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<product>
    <id>1</id>
    <name>Smartphone</name>
    <price>699.99</price>
</product>

Deserialized Product:
ID: 1
Name: Smartphone
Price: 699.99

JSON এবং XML উভয়ের জন্য একই মডেল ব্যবহার

JAXB এবং Jackson ইন্টিগ্রেশন করলে একই মডেল থেকে JSON এবং XML উভয় ফরম্যাট তৈরি করা সম্ভব।

উদাহরণ:

public class CombinedExample {
    public static void main(String[] args) throws Exception {
        Product product = new Product();
        product.setId(1);
        product.setName("Smartphone");
        product.setPrice(699.99);

        // JAXB দিয়ে XML Serialization
        JAXBContext context = JAXBContext.newInstance(Product.class);
        StringWriter writer = new StringWriter();
        Marshaller marshaller = context.createMarshaller();
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
        marshaller.marshal(product, writer);
        System.out.println("XML Output:");
        System.out.println(writer.toString());

        // Jackson দিয়ে JSON Serialization
        ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.registerModule(new JaxbAnnotationModule());
        String json = objectMapper.writeValueAsString(product);
        System.out.println("JSON Output:");
        System.out.println(json);
    }
}

আউটপুট:

XML Output:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<product>
    <id>1</id>
    <name>Smartphone</name>
    <price>699.99</price>
</product>

JSON Output:
{"id":1,"name":"Smartphone","price":699.99}
  • JAXB এবং Jackson ইন্টিগ্রেশন ব্যবহার করে JSON এবং XML উভয় serialization/deserialization সহজে করা যায়।
  • একই মডেল থেকে দুই ফরম্যাট তৈরি করা গেলে কোড পুনর্ব্যবহারযোগ্য এবং সংক্ষিপ্ত হয়।
  • JaxbAnnotationModule Jackson ObjectMapper-কে JAXB annotations পড়তে সক্ষম করে।
  • XML এবং JSON উভয় প্রয়োজন হলে, JAXB এবং Jackson একত্রে একটি কার্যকর সমাধান।
Content added By
Promotion
NEW SATT AI এখন আপনাকে সাহায্য করতে পারে।

Are you sure to start over?

Loading...